$LOAD_PATH.unshift File.join(File.dirname(__FILE__),'../..','ext_pr1/lib')
require 'ext_pr1_v4'

#Erweiterung für Hyperwürfel
# nCube ::= (value, dimension) ::
#    nat x nat =>? nat 
# Testfälle
# { 0,0=>1, 2,1=>2, 2,2=>4, 2,3=>8, 2,4=>16
#   -1,-1=>err, 'a',2=>err, 2,'a'=>err }

def nCube(v, d)
   check_pre(( (v.nat?) and (d.nat?)))
   v**d
end

# Volumen eines Hyperhohlwürfels
# volumencube ::= (außenwürfel,innenwürfel,dimension) ::
#   nat x nat x nat =>? nat:::l_outer>=l_inner
# Testfälle
# { 0,0,0=>0, 1,1,1=>0, 2,2,2=>0, 3,2,2=>5, 3,2,3=>19}

def volumencube(outer, inner, dimension)
   check_pre(( outer.nat? and inner.nat? and dimension.nat? and outer >= inner))
   nCube(outer,dimension) - nCube(inner, dimension)
end